package com.consumer0.listener;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TTLQueueConfig {

    //在 SpringAmqpListener 中通过注解绑定交换机和队列时，必须要有消息处理程序。
    //为了测试发送到队列中的消息超时后，自动由死信交换机投递到指定队列中，我们不需要消息处理程序
    //因此只能采用 @Bean 注解去声明交换机和队列并进行绑定。
    //如果在 SpringAmqpListener 设置 ttl 队列的话，只需要给队列设置 x-message-ttl 参数即可

    @Bean
    public DirectExchange ttlExchange(){
        return new DirectExchange("ttl.exchange");
    }

    @Bean
    public Queue ttlQueue(){
        return QueueBuilder
                .durable("ttl.queue")
                //设置队列中每条消息的存活时间只有 10 秒钟
                .ttl(10000)
                //给队列设置【死信交换机】和【路由key】
                .deadLetterExchange("test.exchange")
                .deadLetterRoutingKey("error")
                .build();
    }

    @Bean
    public Binding ttlBinding(){
        return BindingBuilder.bind(ttlQueue()).to(ttlExchange()).with("ttl");
    }
}


